package com.zy.mc_module.view;

import android.content.Context;
import android.graphics.Color;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.zy.mc_module.R;

import java.util.ArrayList;
import java.util.List;

/***
 * 验证码输入框样式
 */
public class PhoneCode extends RelativeLayout {
    private Context context;
    private TextView tv_code1;
    private TextView tv_code2;
    private TextView tv_code3;
    private TextView tv_code4;
    private TextView tv_code5;
    private TextView tv_code6;
    private View v1;
    private View v2;
    private View v3;
    private View v4;
    private View v5;
    private View v6;
    private EditText et_code;
    private List<String> codes = new ArrayList<>();
    private InputMethodManager imm;

    private onInputComplete onInputComplete;

    private int color_default = getResources().getColor(R.color.ash_cccccc);//选中颜色
    private int color_focus = getResources().getColor(R.color.colorPrimary);//未选中颜色

    //验证码长度
    private int codeLenght = 6;

    public PhoneCode(Context context) {
        super(context);
        this.context = context;
        loadView();
    }

    public PhoneCode(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        loadView();
    }

    private void loadView() {
        imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        View view = LayoutInflater.from(context).inflate(R.layout.phone_code, this);
        initView(view);
        initEvent();
    }

    private void initView(View view) {
        tv_code1 = view.findViewById(R.id.tv_code1);
        tv_code2 = view.findViewById(R.id.tv_code2);
        tv_code3 = view.findViewById(R.id.tv_code3);
        tv_code4 = view.findViewById(R.id.tv_code4);
        tv_code5 = view.findViewById(R.id.tv_code5);
        tv_code6 = view.findViewById(R.id.tv_code6);
        et_code = view.findViewById(R.id.et_code);
        v1 = view.findViewById(R.id.v1);
        v2 = view.findViewById(R.id.v2);
        v3 = view.findViewById(R.id.v3);
        v4 = view.findViewById(R.id.v4);
        v5 = view.findViewById(R.id.v5);
        v6 = view.findViewById(R.id.v6);
    }

    private void initEvent() {
        //验证码输入
        et_code.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void afterTextChanged(Editable editable) {
                if (editable != null && editable.length() > 0) {
                    et_code.setText("");
                    if (codes.size() < codeLenght) {
                        setCode(editable.toString());
                        //codes.add(editable.toString());
                        //showCode();
                    }
                    //if (codes.size() == codeLenght && null != onInputComplete) {
                    //   //验证码全部输入后自动登录
                    //   onInputComplete.inputComplete();
                    //}
                }
            }
        });
        // 监听验证码删除按键
        et_code.setOnKeyListener((view, keyCode, keyEvent) -> {
            if (keyCode == KeyEvent.KEYCODE_DEL && keyEvent.getAction() == KeyEvent.ACTION_DOWN
                    && codes.size() > 0) {
                codes.remove(codes.size() - 1);
                showCode();
                return true;
            }
            return false;
        });
    }

    public void setCode(String codeStr) {
        if (!TextUtils.isEmpty(codeStr)) {
            for (int i = 0; i < codeStr.toCharArray().length; i++) {
                codes.add(String.valueOf(codeStr.toCharArray()[i]));
            }
            showCode();
        }
    }

    /**
     * 显示输入的验证码
     */
    private void showCode() {
        String code1 = "";
        String code2 = "";
        String code3 = "";
        String code4 = "";
        String code5 = "";
        String code6 = "";
        if (codes.size() >= 1) {
            code1 = codes.get(0);
        }
        if (codes.size() >= 2) {
            code2 = codes.get(1);
        }
        if (codes.size() >= 3) {
            code3 = codes.get(2);
        }
        if (codes.size() >= 4) {
            code4 = codes.get(3);
        }
        if (codes.size() >= 5) {
            code5 = codes.get(4);
        }
        if (codes.size() >= 6) {
            code6 = codes.get(5);
        }
        if ("".equals(code1)) {
            tv_code1.setText(" ");
        } else {
            tv_code1.setText(code1);
        }
        tv_code2.setText(code2);
        tv_code3.setText(code3);
        tv_code4.setText(code4);
        tv_code5.setText(code5);
        tv_code6.setText(code6);
        setColor();
        if (tv_code6.length() > 0 && null != onInputComplete) {
            //验证码全部输入后自动登录
            onInputComplete.inputComplete();
        }
    }

    /**
     * 设置高亮颜色
     */
    private void setColor() {
        v1.setBackgroundColor(color_default);
        v2.setBackgroundColor(color_default);
        v3.setBackgroundColor(color_default);
        v4.setBackgroundColor(color_default);
        v5.setBackgroundColor(color_default);
        v6.setBackgroundColor(color_default);
        if (codes.size() == 0) {
            v1.setBackgroundColor(color_focus);
        }
        if (codes.size() == 1) {
            v2.setBackgroundColor(color_focus);
        }
        if (codes.size() == 2) {
            v3.setBackgroundColor(color_focus);
        }
        if (codes.size() == 3) {
            v4.setBackgroundColor(color_focus);
        }
        if (codes.size() == 4) {
            v5.setBackgroundColor(color_focus);
        }
        if (codes.size() >= 5) {
            v6.setBackgroundColor(color_focus);
        }
    }

    /**
     * 显示键盘
     */
    public void showSoftInput() {
        //显示软键盘
        if (imm != null && et_code != null) {
            et_code.postDelayed(() -> imm.showSoftInput(et_code, 0), 200);
        }
    }

    /**
     * 获得手机号验证码
     *
     * @return 验证码
     */
    public String getPhoneCode() {
        StringBuilder sb = new StringBuilder();
        for (String code : codes) {
            sb.append(code);
        }
        return sb.toString();
    }

    /**
     * 清空验证码
     *
     * @return 验证码
     */
    public void clear() {
        if (null != codes) {
            codes.clear();
            tv_code1.setText("");
            tv_code2.setText("");
            tv_code3.setText("");
            tv_code4.setText("");
            tv_code5.setText("");
            tv_code6.setText("");
            v1.setBackgroundColor(color_focus);
            v2.setBackgroundColor(color_default);
            v3.setBackgroundColor(color_default);
            v4.setBackgroundColor(color_default);
            v5.setBackgroundColor(Color.parseColor("#cccccc"));
            v6.setBackgroundColor(Color.parseColor("#cccccc"));
        }
    }

    /***
     * 验证码输入完成后自动登录
     */
    public void setOnInputComplete(onInputComplete onInputComplete) {
        this.onInputComplete = onInputComplete;
    }

    public interface onInputComplete {
        void inputComplete();
    }
}
